using System;

namespace AnimalHierarchy // 命名空间
{
    public class Animal // 基类
    {
        public string Name { get; set; }

        public Animal(string name)
        {
            Name = name;
        }

        public virtual void Speak() // 虚方法
        {
            Console.WriteLine($"{Name} is making a sound.");
        }
    }

    public class Dog : Animal // 派生类
    {
        public Dog(string name) : base(name) // 调用基类构造函数
        {
        }

        public override void Speak() // 重写基类的方法
        {
            Console.WriteLine($"{Name} says: Woof!");
        }
    }

    public class Cat : Animal // 派生类
    {
        public Cat(string name) : base(name) // 调用基类构造函数
        {
        }

        public override void Speak() // 重写基类的方法
        {
            Console.WriteLine($"{Name} says: Meow!");
        }
    }

    public class Program
    {
        public static void Main(string[] args)
        {
            Animal dog = new Dog("Buddy");
            Animal cat = new Cat("Whiskers");

            dog.Speak(); // 输出: Buddy says: Woof!
            cat.Speak(); // 输出: Whiskers says: Meow!
        }
    }
}

